定义:与某些特定类型相关联的函数。
方法 | 支持类型 | 关联对象 |
---|---|---|
实例方法 | 类、结构体、枚举 | 实例 |
类型方法 | 类、结构体、枚举 | 类型 |
11.1 实例方法
说明:写在它所属的类型的前后
{}
之间
- 能够隐式访问它所属类型的所有的其他实例方法和属性
- 只能被它所属的类的某个特定实例调用
调用位置 | 调用方式 |
---|---|
内部 | 能够隐式访问它所属类型的所有其它实例方法和属性 |
外部 | 只能被它所属的类的某个特定实例调用 |
1 | class Counter { |
11.1.1 方法的内部参数名和外部参数名
说明:同函数。
1 | class Counter { |
11.1.2 修改方法的外部参数名称
说明:同函数。
- 可以为第一个参数添加一个显式的外部名称
- 不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线
_
作为该参数的显式外部名称
1 | /** |
11.1.3 self属性
说明:类型的每一个实例都有一个隐含属性叫做
self
,self
完全等同于该实例本身。
- 在方法中调用实例的其它方法和属性时可以省略
self
(除非需要区分参数名和属性名)用途:在一个实例的实例方法中使用这个隐含的self属性来引用当前实例
1 | struct Point { |
11.1.4 在实例方法中修改值类型
背景:值类型(结构体和枚举)的属性不能在普通实例方法中被修改
说明:关键字mutating
放到方法的func
关键字之前,使变量实例属性的方法具备修改实例中的属性(包括self
)的能力。
注意:不能在结构体类型的常量上调用可变方法,因为此时所有属性都无法修改。
1 | struct Point { |
11.1.5 在变异方法中给self赋值(通过mutating
)
说明:可变方法能够赋给隐含属性self一个全新的实例
结构体中使用
1 | struct Point { |
枚举中使用
1 | //定义一个三态开关的枚举,具备循环切换状态的能力 |
11.2 类型(静态)方法
关键字:使用的关键字同类型(静态)属性。
类型 | 关键字 |
---|---|
类 | class |
结构体、枚举 | static |
说明:类型方法和实例方法一样用
点语法
调用
self
属性指向类型本身- 静态(类型)方法法中
能也只能
直接(不需要类型名称前缀)访问其它静态方法和属性
1 | struct LevelTracker{ |